###################
# BUILD FOR LOCAL DEVELOPMENT
###################

FROM node:16-alpine As development

# 创建应用目录
WORKDIR /usr/src/app

# 复制依赖清单到容器镜像里.
# 复制package.json和pnpm-lock.yaml,复制到当前应用目录.
# 首先复制这个选项可以防止在每次代码更改时重新运行pnpm install.
COPY --chown=node:node package.json ./
COPY --chown=node:node pnpm-lock.yaml ./

RUN npx pnpm install 

COPY --chown=node:node . .

# 使用指定的用户而不是root权限用户
USER node

###################
# BUILD FOR PRODUCTION
###################

FROM node:16-alpine As build

WORKDIR /usr/src/app

COPY --chown=node:node package.json ./
COPY --chown=node:node pnpm-lock.yaml ./


# 然后把安装后依赖全部复制到指定目录
COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules

COPY --chown=node:node . .

# 设置生产环境变量
ENV NODE_ENV production

# 执行打包命令
RUN npx pnpm  run build

# 清除node_modules安装包
RUN rm -rf  ./node_modules

#并传入——only=production确保只安装了生产依赖项。这确保node_modules目录尽可能优化
RUN npx pnpm install --only=production

# 使用指定的用户而不是root权限用户
USER node

###################
# PRODUCTION
###################

FROM node:16-alpine As production

# 将生产依赖和打包后的文件复制到指定目录下
COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist
COPY --chown=node:node --from=build /usr/src/app/web ./web
COPY --chown=node:node --from=build /usr/src/app/static ./static

# 设置生产环境变量
ENV NODE_ENV production

# 启动服务
CMD node  ./dist/main.js

# 暴露端口
EXPOSE 5000
